69 config = OmegaConf.load(os.path.join(os.path.dirname(os.path.abspath(__file__)),
'config/eth-xgaze.yaml'))
70 config.PACKAGE_ROOT = pathlib.Path(__file__).parent.resolve().as_posix()
72 self.
camera = Camera(config.gaze_estimator.camera_params)
74 def render(self, img, face, draw_face_bbox=True, draw_face_landmarks=True, draw_3dface_model=True,draw_head_pose=True, draw_gaze_vector=True,
79 bbox = np.round(face.bbox).astype(int).tolist()
80 cv2.rectangle(img, tuple(bbox[0]), tuple(bbox[1]), color, size)
82 if draw_face_landmarks:
83 for pt
in face.landmarks:
84 pt = tuple(np.round(pt).astype(np.int).tolist())
85 cv2.circle(img, pt, size, color, cv2.FILLED)
88 points2d = self.
camera.project_points(face.model3d)
90 pt = tuple(np.round(pt).astype(np.int).tolist())
91 cv2.circle(img, pt, size, color, cv2.FILLED)
94 axes3d = np.eye(3, dtype=np.float) @ Rotation.from_euler(
'XYZ', [0, np.pi, 0]).as_matrix()
96 axes2d = self.
camera.project_points(axes3d, face.head_pose_rot.as_rotvec(), face.head_position)
98 center = tuple(np.round(center).astype(np.int).tolist())
100 pt = tuple(np.round(pt).astype(np.int).tolist())
101 cv2.line(img, center, pt, color, 2, cv2.LINE_AA)
106 points3d = np.vstack([start, end])
107 points2d = self.
camera.project_points(points3d)
108 pt0 = tuple(np.round(points2d[0]).astype(int).tolist())
109 pt1 = tuple(np.round(points2d[1]).astype(int).tolist())
110 cv2.line(img, pt0, pt1, color, 1, cv2.LINE_AA)